package br.ucb.musicbay.usuario;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class UsuarioDao implements UsuarioInterfaceDao {

	private Session session;

	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public boolean save(Usuario user) {
		try {
			this.session.save(user);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	@Override
	public boolean update(Usuario user) {
		try {
			this.session.update(user);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	@Override
	public Usuario select(Usuario user) {
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> recoverAll() {
		Criteria criteria = this.session.createCriteria(Usuario.class);
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> recoverAdmin() {
		Criteria criteria = this.session.createCriteria(Usuario.class);
		return criteria.list();
	}

	@Override
	public Usuario buscarPorLogin(String login) {
		Criteria criteria = session.createCriteria(Usuario.class).add(Restrictions.eq("login", login));
		return (Usuario) criteria.uniqueResult();
	}

	@Override
	public Usuario recoverById(Integer id) {
		return (Usuario) session.get(Usuario.class, id);
	}

	@Override
	public boolean delete(Usuario[] user) {
		try {
			for (Usuario usuario : user) {
				session.delete(usuario);
			}
			return true;
		} catch (Exception e) {
			throw new HibernateException("ERRO! ERRO - delete(Artista[] artista) " + new Date());
		}
	}

	@Override
	public Usuario verificaItem(String nome, String item) {
		Criteria crit = session.createCriteria(Usuario.class);
		crit.add(Restrictions.eq(nome, item));
		Usuario usuario = (Usuario) crit.uniqueResult();
		return usuario;		
	}

}
